17
תגובות
הוספתי בהתחלה קידומת PHP, כדי שזה יהיה ברור יותר. XD
נניח שיש לי קובץ עם מערך קונפיגורציה (ועם הערות לצד כל אלמנט, לצורך העניין). אני יכול לערוך את זה בזמן ריצה עם מחלקת ה-Config שלי, אבל מה שאני לא יודע איך לעשות זה לשנות את המערך לתמיד, באמצעות קוד.
אני מניח שזה ידרוש איזשהו מפענח PHP פשוט וטוב... אתם מכירים משהו כזה?

17 תשובות

avatar ענה intval ב 08 למאי 2013 #

למפענח שלך קוראים include

avatar ענה OrelBeY ב 08 למאי 2013 #

אני רוצה "לערוך" את קובץ הקונפיגורציה עצמו בזמן ריצה ולשמור את השינויים בקובץ המקורי. אין לי מושג מה לשנות ואיך עד זמן ריצה. אז אני לא מבין איך include אמור לעזור לי.

avatar ענה Michael ב 08 למאי 2013 #

אוקיי, אז אתה עושה file_get_contents, עושה / בונה את השינויים שלך, שומר את הקובץ, ועושה include?

avatar ענה OrelBeY ב 08 למאי 2013 #

אוי, נו באמת. XDDD
כל השאלה שלי היא איך אני עושה את השינויים. אני לא יכול פשוט לחפש "key", ואז " => " ואז לשנות את מה שלא יהיה שם (שזה אגב, יכול להיות מערך/סקלר/Closure). אופס, וגם יש הערות קוד שאני לא יכול לפגוע בהן, וייתכן שה"שאילתה" שלי תתאים להם. קיצר, הבנת את הרעיון. (אני מקווה.)

avatar ענה intval ב 08 למאי 2013 #

אתה קורא את המערך (data) על ידי אינקלוד פשוט, משנה אותו, ורושם אותו בחזרה בצורה הבאה:

$contents = '$data = '.var_export($data, true).';';
file_put_contents($file, $contents);

avatar ענה OrelBeY ב 09 למאי 2013 #

אני יודע לעשות את זה, אבל כמו שהדגשתי - אני צריך לשמור על ההזחה ועל ההערות בקוד.

avatar ענה intval ב 09 למאי 2013 #

אני חושב שאתה עושה משהו מיותר.
או שהערות ושמירת המבנה מיותרות והעריכה מתבצעת רק דרך סקריפט שאתה כותב
או שהעריכה דרך סקריפט מיותרת ותשאיר אותה רק דרך פתיחת הקובץ.
תבחר use case אחד. אין צורך לממש הכל.

---
אם אתה עושה את זה סתם מתוך אינטרס ספורטיבי,
אז או שתממש לבד עם ביטויים רגולריים, או תממש lexer משלך על בסיס php.net/token_get_all

avatar ענה OrelBeY ב 10 למאי 2013 #

ההערות ממש לא מיותרות.
זה לא מתוך אינטרס של "בא לי לעשות את זה כדי להתאמן" או משהו כזה. יש לי CMS, ויש כמה הגדרות תצורה שאני רוצה לאפשר למשתמש לשנות דרך לוח הניהול, ואני ממש לא הולך להגיד לו: "לך לקובץ xyz, תחפש blablabla ותרשום a בשביל לקבל ככה, b לקבל ככה."
הייתי הולך על XML אם לא הייתי מאפשר למפתח גם Closures. (שזה חלק מהגמישות של המערכת.)

avatar ענה intval ב 10 למאי 2013 #

אז בשביל מה לשמור על מבנה קובך, לרשום הערות בקובץ אם אתה הולך לאפשר עריכה דרך פאנל ניהול?
מה איכפת לך איך זה יראה בתוך הקובץ? שיהיה קובץ json אם base64. מה זה משנה.

avatar ענה OrelBeY ב 10 למאי 2013 #

אוף, אני גרוע בלהסביר את עצמי.
כי חלק מ"הרגלי הקוד" שלי זה לכתוב הערות בקוד, על מנת לאפשר למפתחים אחרים לדעת מה זה מה, ולמה ככה. ולמה ב-Closure שמפתח A כתב הוא משתמש ב-X ולא ב-Y.

avatar ענה OrelBeY ב 10 למאי 2013 #

מה זה Lexer? ונראה ש-token_get_all באמת יעזור. אני אנסה, תודה. :-)

avatar ענה intval ב 10 למאי 2013 #

מפתחים אחרים יבינו לפי ה KEY מה הערך אומר.

avatar ענה OrelBeY ב 10 למאי 2013 #

בקטע הזה אפשר להשמיט את ההערות ולשים את זה בדוקומנטציה של המערכת. מה שלא יהיה אפשר לעשות זה להשמיט הערות של Closures, כי זה לא משהו מוגדר במערכת, אתה פשוט עושה מה שאתה רוצה (למטרה מסוימת, כמובן, אבל עדיין).

avatar ענה intval ב 10 למאי 2013 #

אני לא ממש מבין מה הקשר של הקלוז'ורים לקונפיגים שאתה רוצה לתת לאנשים לערוך.
שים אותם בקבצים שונים וזהו.

avatar ענה OrelBeY ב 10 למאי 2013 #

אולי אתה צודק. נראה שקצת קשה להבין את השאלות שלי לאחרונה, אולי הן נשמעות כאלה מוזרות ולא קשורות, אבל וואטבר. XD
בכל מקרה, תודה. :-)

avatar ענה intval ב 10 למאי 2013 #

לי בקריירת התכנות הייה שלב שנקרא
"איך אני דוחף כל מה שאני יודע לכל מקום אפשרי".
אצלי זה בדרך כלל גרם לשאלות ממש מוזרות.

avatar ענה OrelBeY ב 11 למאי 2013 #

מקווה שזה רק שלב. XD
אוקיי, אז החלטתי לחלק את זה לשתי סוגי קונפיגורציה:
1. קונפיגורציה שבאה עם הפריימו'ורק ושאין טעם לתת למשתמש רגיל לשנות. (אם כי בכל מקרה אני אספק הוראות למקרה שה-CMS יתמוך בכמה שינויים, ואז המשתמש ה"מתקדם" יוכל לעשות את זה ידנית.)
2. הגדרות תצורה של ה-CMS עצמו, בפורמט XML או בבסיס נתונים (עדיין לא בטוח), ואפשר לתת למנהל האתר לשנות אותן (או חלק מהן) בקלות.
יש הערות? משהו? :-)